TOP

SQL GROUP BY

SQL GROUP BY Descrição

A instrução GROUP BY agrupa linhas com os mesmos valores em linhas de resumo, como "encontre o número de clientes em cada país".

A instrução GROUP BY é frequentemente usada com funções agregadas (COUNT(), MAX(), MIN(), SUM(), AVG()) para agrupar um conjunto de resultados por uma ou mais colunas.


GROUP BY Sintaxe

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s)

Banco de dados de demonstração

A seguir está um exemplo da tabela "Customers" ("Clientes") do banco de dados "Northwind":

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.5021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.5023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

SQL GROUP BY Exemplos

A instrução SQL a seguir lista o número de clientes em cada país:

Run SQLSELECT COUNT(CustomerID), Country 
FROM Customers 
GROUP BY Country

A seguinte instrução SQL lista os clientes em cada país, classificados do maior para o menor:

Run SQLSELECT COUNT(CustomerID), Country 
FROM Customers 
GROUP BY Country 
ORDER BY COUNT(CustomerID) DESC

Banco de dados de demonstração

A seguir está um exemplo da tabela "Orders" ("Pedidos") do banco de dados "Northwind":

ProductIDOrderIDCustomerIDEmployeeIDOrderDateShipperID
1102489051996-07-043
2102498161996-07-051
3102503441996-07-082
4102518431996-07-081
5102527641996-07-092

E a amostra da tabela "Shippers" ("Remetentes"):

ShipperIDShipperNamePhone
1Speedy Express(503) 555-9831
2United Package(503) 555-3199
3Federal Shipping(503) 555-9931

GROUP BY junto com JOIN Exemplo

A seguinte instrução SQL lista o número de pedidos enviados por cada remetente:

Run SQLSELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders 
FROM Orders 
LEFT JOIN Shippers 
ON Orders.ShipperID = Shippers.ShipperID 
GROUP BY ShipperName